#include <stdio.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "iot_gpio.h"
#include "hi_io.h"
#include "iot_pwm.h"
#include "hi_pwm.h"
#include "hi_time.h"

// 呼吸灯任务函数
static void breathing_led_task(void *arg)
{
    // 初始化GPIO
    IoTGpioInit(10); 
    // 设置GPIO10为PWM输出功能
    hi_io_set_func(HI_IO_NAME_GPIO_10, HI_IO_FUNC_GPIO_10_PWM1_OUT); 
    // 初始化PWM
    hi_pwm_init(HI_PWM_PORT_PWM1); 
    // 设置PWM时钟源
    hi_pwm_set_clock(PWM_CLK_XTAL); 

    while (1) {
        // 由暗到亮
        for (int i = 0; i <= 100; i++) {
            // 启动PWM输出，占空比逐渐增大
            hi_pwm_start(HI_PWM_PORT_PWM1, i, 100); 
            // 延时一段时间，控制呼吸变化速度
            hi_udelay(1500); 
        }
        // 由亮到暗
        for (int i = 100; i >= 0; i--) {
            // 启动PWM输出，占空比逐渐减小
            hi_pwm_start(HI_PWM_PORT_PWM1, i, 100); 
            // 延时一段时间，控制呼吸变化速度
            hi_udelay(1500); 
        }
    }
}

// 呼吸灯任务入口函数
static void breathing_led_entry(void)
{
    osThreadAttr_t attr = {0};
    attr.name = "breathing_led_task";
    attr.stack_size = 4096;
    attr.priority = osPriorityNormal;

    if (osThreadNew(breathing_led_task, NULL, &attr) == NULL) {
        printf("[breathing_led_entry] create breathing_led_task failed!\n");
    }
}

// 系统启动时运行呼吸灯任务
SYS_RUN(breathing_led_entry);